import pika

"""
    RabbitMQ 还有一些高级功能。比如说，如果我们要想生产者发送的消息有优先级的区分，希望高优先级的队列被优先接收到, 如何实现?
    我们只需要在声明队列的时候增加一个属性即可
"""

"""
    声明队列的时候，我们增加了一个参数，叫做 x-max-priority，指定一个最大优先级   整个队列就支持优先级了
    这里改写下生产者，在发送消息的时候指定一个 properties 参数为 BasicProperties 对象，BasicProperties 对象里面通过 priority 参数指定了对应消息的优先级
"""

# 这里优先级我们也可以手动输入，输入的内容我们需要分为两部分，用空格隔开

MAX_PRIORITY = 100
QUEUE_NAME = 'scrape'

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))

channel = connection.channel()

# 删除名为 'scrape' 的队列-- 因为之前队列已经创建了，所以为了不报错，先删除队列
# channel.queue_delete(queue=QUEUE_NAME)
# print("Queue deleted.")

channel.queue_declare(queue=QUEUE_NAME, arguments={
    'x-max-priority': MAX_PRIORITY
})

while True:
    data, priority = input().split()
    channel.basic_publish(exchange='',
                          routing_key=QUEUE_NAME,
                          properties=pika.BasicProperties(
                              priority=int(priority),
                          ),
                          body=data)
    print(f'Put {data}')

# 重新运行随用随取消费者，按几次回车，可以看到按优先级获取到了 生成内容
